package com.view 
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.Sprite;
	import flash.display.Stage;
	
	/**
	 * 游戏视图管理器 主要是交互层 UI层 tips层的管理和添加移除等功能
	 */	
	public class Vision
	{
		/**交互层字段*/		
		public static const MAIN:String = "MAIN"; 
		
		/**
		 * 浮动层字段 介于MAIN 和 UI 两层之间
		 * 例:Alert弹框,空中单位等
		 */		
		public static const UNSTABLE:String = 'UNSTABLE';
		
		/**UI字段*/		
		public static const UI:String = "UI";
		
		/**TIP字段*/		
		public static const TIPS:String = "TIPS";
		
		public static var stage:Stage;
		
		private static const DPO_DIC:Object = {};
		//通过以上的字段 存储各个层次的容器
		
		/**
		 * 该函数依次在该容器里添加3个容器层次
		 * @param dpc 容器
		 * mian层：主游戏层
		 * unstable浮动层：介于MAIN和UI两层之间,例:Alert弹框,空中单位等
		 * ui层：logo,按钮，图标等
		 * tip层：提示层，该层不接受鼠标事件
		 */
		public static function createChildren(dpc:DisplayObjectContainer):void
		{
			stage = dpc.stage;
			var main:Sprite = new Sprite();
			dpc.addChild(main);
			DPO_DIC[MAIN] = main;
			//在MAIN层创建容器 然后由DPO_DIC存储该容器
			
			var unstable:Sprite = new Sprite();
			dpc.addChild(unstable);
			DPO_DIC[UNSTABLE] = unstable;
			
			var ui:Sprite = new Sprite();
			dpc.addChild(ui);
			DPO_DIC[UI] = ui;
			
			var tip:Sprite = new Sprite();
			dpc.addChild(tip);
			DPO_DIC[TIPS] = tip;
			tip.mouseEnabled = false;
			//让此容器不接受鼠标事件 
			//但子容器可以选择性接收
		}
		/**
		 * 添加可视对象到指定层次（）
		 * @param id 容器层次（MAIN，UI，TIPS）
		 * @param child 显示对象
		 */		
		public static function addView(id:String,child:DisplayObject,_x:int = 0,_y:int = 0):void
		{
			var contain:Sprite = DPO_DIC[id];
			contain.addChild(child);
			if(_x != 0) child.x = _x;
			if(_y != 0) child.y = _y;
		}
		/**
		 * 删除指定容器里的指定对象
		 * @param id 容器层次
		 * @param child 显示对象
		 */		
		public static function removeView(id:String,child:DisplayObject):void
		{
			if(child != null && child.parent != null)
			{
				//判断传入的视图是否是合格的 并且判断该视图的父容器是否存在
				var contain:Sprite = DPO_DIC[id];
				contain.removeChild(child);
			}
		}
		
		/**获取对应图层容器的实例,方便屏蔽事件*/		
		public static  function layer(id:String):Sprite{
			return DPO_DIC[id];
		}
		
	}
}